From 795727aad4494d2a86a1184762e5718a30e02639 Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Thu, 13 Mar 2008 00:25:50 +0000 Subject: [PATCH] Find the common prefix based on the cursor position Signed-off-by: Federico Mena Quintero svn path=/trunk/; revision=19798 --- gtk/gtkfilechooserentry.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/gtk/gtkfilechooserentry.c b/gtk/gtkfilechooserentry.c index e68248d987..9b5f3dbdba 100644 --- a/gtk/gtkfilechooserentry.c +++ b/gtk/gtkfilechooserentry.c @@ -413,8 +413,13 @@ find_common_prefix (GtkFileChooserEntry *chooser_entry, gchar **common_prefix_ret, GtkFilePath **unique_path_ret) { + GtkEditable *editable; GtkTreeIter iter; + gboolean parsed; gboolean valid; + char *text_up_to_cursor; + GtkFilePath *parsed_folder_path; + char *parsed_file_part; *common_prefix_ret = NULL; *unique_path_ret = NULL; @@ -422,6 +427,22 @@ find_common_prefix (GtkFileChooserEntry *chooser_entry, if (chooser_entry->completion_store == NULL) return; + editable = GTK_EDITABLE (chooser_entry); + + text_up_to_cursor = gtk_editable_get_chars (editable, 0, gtk_editable_get_position (editable)); + + parsed = gtk_file_system_parse (chooser_entry->file_system, + chooser_entry->base_folder, + text_up_to_cursor, + &parsed_folder_path, + &parsed_file_part, + NULL); /* NULL-GError */ + + g_free (text_up_to_cursor); + + if (!parsed) + return; + valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (chooser_entry->completion_store), &iter); while (valid) @@ -435,7 +456,7 @@ find_common_prefix (GtkFileChooserEntry *chooser_entry, PATH_COLUMN, &path, -1); - if (g_str_has_prefix (display_name, chooser_entry->file_part)) + if (g_str_has_prefix (display_name, parsed_file_part)) { if (!*common_prefix_ret) { @@ -464,6 +485,9 @@ find_common_prefix (GtkFileChooserEntry *chooser_entry, gtk_file_path_free (path); valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (chooser_entry->completion_store), &iter); } + + gtk_file_path_free (parsed_folder_path); + g_free (parsed_file_part); } /* Finds a common prefix based on the contents of the entry and mandatorily appends it */ -- 2.30.2